﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data.Common;
using System.Data;
using Sinacor.Infra.Service.Data;
using Sinacor.Infra.Service.Security.Authorization;
using Sinacor.Infra.Service.Common;

namespace Sinacor.Servico.Bovespa.Parametro.ResourceAccess
{

    /// <summary>
    /// Business Logic Parametro
    /// </summary>
    public class Parametro : BaseResourceAccess
    {
        #region Construtor

        /// <summary>
        /// Construtor padrão
        /// </summary>
        public Parametro()
            : base(AuthorizationContext.Current.CompanyId)
        {
        }

        #endregion

        #region RecuperarIndicadorDigitoCliente
        /// <summary>
        /// Método RecuperarIndicadorDigitoCliente
        /// </summary>
        public BusinessEntity.Parametro RecuperarIndicadorDigitoCliente()
        {
            BusinessEntity.Parametro response = null;
            StringBuilder sql = new StringBuilder();

            sql.Append(@"SELECT IN_DIGITO FROM TORPARM");

            using (DbCommand command = this.DataBase.GetSqlStringCommand(sql.ToString()))
            {
                response = this.FindOne<BusinessEntity.Parametro>(command, new ConstructEntity<BusinessEntity.Parametro>(ConstrutorRecuperarIndicadorDigitoCliente));
            }

            return response;
        }

        #endregion

        #region ConstrutorRecuperarIndicadorDigitoCliente
        protected BusinessEntity.Parametro ConstrutorRecuperarIndicadorDigitoCliente(IDataReader reader)
        {
            BusinessEntity.Parametro entity = new BusinessEntity.Parametro();

            entity.IndicadorDigitoCliente = reader.GetValue<System.String>("IN_DIGITO");

            return entity;
        }
        #endregion

        #region RecuperarJuntaFracionario
        /// <summary>
        /// Método RecuperarJuntaFracionario
        /// </summary>
        public BusinessEntity.Parametro RecuperarJuntaFracionario()
        {
            BusinessEntity.Parametro response = null;
            StringBuilder sql = new StringBuilder();

            sql.Append(@"SELECT IN_FRACIONARIO FROM TORPARM");

            using (DbCommand command = this.DataBase.GetSqlStringCommand(sql.ToString()))
            {
                response = this.FindOne<BusinessEntity.Parametro>(command, new ConstructEntity<BusinessEntity.Parametro>(ConstrutorRecuperarJuntaFracionario));
            }

            return response;
        }

        #endregion

        #region ConstrutorRecuperarJuntaFracionario
        protected BusinessEntity.Parametro ConstrutorRecuperarJuntaFracionario(IDataReader reader)
        {
            BusinessEntity.Parametro entity = new BusinessEntity.Parametro();
            entity.JuntaFracionario = reader["IN_FRACIONARIO"] == DBNull.Value ? 'N' : reader.GetValue<char>("IN_FRACIONARIO");
            return entity;
        }
        #endregion

        #region RecuperarIndicadorTipoLiquidacaoCustodianteAutomatico

        /// <summary>
        /// Metodo responsavel por recuperar a informacao IN_CAR888 da tabela TORPARM (Parâmetro do Sistema de Controle de Ordens)
        /// Indica para Gravar Carteira 888 na Compra para Institucional
        /// Data: 02/01/2008
        /// Autor: Eduardo Sertorio
        /// Obs: Criacao do metodo
        /// 
        /// Data    : 18/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método transposto do módulo Comum, que será extinto
        /// </summary>
        /// <returns></returns>
        public string RecuperarIndicadorTipoLiquidacaoCustodianteAutomatico() //renomeado - rvaladao - 20080504 23:30 - bug 3642
        {
            OracleDataBase dbParametros = this.DataBase;
            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT IN_CAR888 FROM TORPARM");

            return Convert.ToString(dbParametros.ExecuteScalar(dbCommand));
        }

        #endregion

        #region RecuperarInBloqueio
        /// <summary>
        /// Metodo responsavel por recuperar a informacao IN_BLOQUEIO da tabela TORPARM
        /// Data: 03/12/2007
        /// Autor: Ludmilla Modesto 
        /// Obs: Criacao do metodo
        /// 
        /// Data    : 18/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método transposto do módulo Comum, que será extinto
        /// </summary>
        /// <returns></returns>
        public string RecuperarInBloqueio()
        {
            OracleDataBase dbParametros = this.DataBase;
            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT IN_BLOQUEIO FROM TORPARM");

            return Convert.ToString(dbParametros.ExecuteScalar(dbCommand));
        }
        #endregion

        #region RecuperarDataSistemaContasCorrentes
        /// <summary>
        /// Metodo responsavel por buscar data do sistema de Contas Correntes
        /// Data: 14/12/2007
        /// Autor: Ludmilla Modesto 
        /// Obs: Criacao do metodo
        /// 
        /// Data    : 18/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método transposto do módulo comum, que será extinto
        /// </summary>
        /// <returns></returns>
        public DateTime RecuperarDataSistemaContasCorrentes()
        {
            //OracleDataBase dbParametros = this.DataBase;
            OracleDataBase dbParametros = this.DataBase;
            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT DT_ATUAL FROM V_TCCPARAM");

            return Convert.ToDateTime(dbParametros.ExecuteScalar(dbCommand));
        }
        #endregion

        #region RecuperarDataSistemaCustodia
        /// <summary>
        /// Metodo responsavel por buscar data do sistema de Custódia
        /// Data: 14/12/2007
        /// Autor: Ludmilla Modesto 
        /// Obs: Criacao do metodo
        /// 
        /// Incluido uso do metodo [AuthorizationContext.Current.CompanyId] no parametro do contrutor da classe [OracleDataBase]
        /// Autor: Eduardo Sertorio
        /// Data: 09/01/2008
        /// 
        /// Data    : 18/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método transposto do módulo Comum, que será extinto
        /// </summary>
        /// <returns></returns>
        public DateTime RecuperarDataSistemaCustodia()
        {
            OracleDataBase dbParametros = this.DataBase; //descomentado - eduardo - 20080109
            //OracleDataBase dbParametros = new OracleDataBase(4); //comentado - eduardo - 20080109
            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT DATATU FROM V_CSPARAM");

            return Convert.ToDateTime(dbParametros.ExecuteScalar(dbCommand));
        }
        #endregion

        #region RecuperarJuntaFracionario
        /// <summary>
        /// Metodo responsavel por recuperar a informacao INDICADOR DE ATUALIZACAO DA QUANTIDADE DA ORDEM PELO PRE-BOLETO (IN_BOLETO_ATU_ORDEM) da tabela TORPARM
        /// Data: 22/07/2008
        /// Autor: Marcelo Barucci
        /// Obs: Criacao do metodo
        /// 
        /// Data    : 18/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método transposto do módulo Comum, que será extinto
        /// </summary>
        /// <returns></returns>
        public string RecuperarJuntaFracionario_OLD()
        {
            OracleDataBase dbParametros = this.DataBase;
            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT IN_FRACIONARIO FROM TORPARM");

            return Convert.ToString(dbParametros.ExecuteScalar(dbCommand));
        }
        #endregion

        #region RecuperarIndicadorVerificacaoSaldoNegociavel
        /// <summary>
        /// Metodo responsavel por recuperar a informacao IN_VERI_SALD_NGCV da tabela TORPARM
        /// Indicador Verificacao Saldo Negociavel
        /// Data: 30/11/2007
        /// Autor: Diogo Milanez
        /// Obs: Criacao do metodo
        /// 
        /// Data: 07/12/2007
        /// Autor: Diogo Milanez
        /// Obs: Metodo foi renomeado de RecuperarInVeriSaldNgcv para RecuperarIndicadorVerificacaoSaldoNegociavel
        /// 
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método transposto do submodulo Comum, que será extinto
        /// </summary>
        /// <returns></returns>
        public string RecuperarIndicadorVerificacaoSaldoNegociavel()
        {
            OracleDataBase dbParametros = this.DataBase;
            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT IN_VERI_SALD_NGCV FROM TORPARM");

            return Convert.ToString(dbParametros.ExecuteScalar(dbCommand));
        }
        #endregion

        #region RecuperarIndicadorUtilizacaoCompliance
        /// <summary>
        /// Metodo responsavel por recuperar a informacao IN_COMPLIANCE da tabela TORPARM
        /// Indica se utiliza Compliance
        /// Data: 30/11/2007
        /// Autor: Diogo Milanez
        /// Obs: Criacao do metodo
        /// 
        /// Data: 07/12/2007
        /// Autor: Diogo Milanez
        /// Obs: Metodo foi renomado de RecuperarInCompliance para RecuperarIndicadorUtilizacaoCompliance
        /// 
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método transposto do submodulo Comum, que será extinto
        /// </summary>
        /// <returns></returns>
        public string RecuperarIndicadorUtilizacaoCompliance()
        {
            OracleDataBase dbParametros = this.DataBase;
            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT IN_COMPLIANCE FROM TORPARM");

            return Convert.ToString(dbParametros.ExecuteScalar(dbCommand));
        }
        #endregion

        #region RecuperarDataSistemaBancoDados
        /// <summary>
        /// Metodo responsavel por buscar sysdate do banco de dados
        /// Data: 09/01/2008
        /// Autor: Eduardo Sertorio
        /// Obs: Criacao do metodo
        /// 
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método transposto do submódulo Comum, que será extinto
        /// </summary>
        /// <returns>DateTime</returns>
        public DateTime RecuperarDataSistemaBancoDados()
        {
            //OracleDataBase dbParametros = this.DataBase;
            OracleDataBase dbParametros = this.DataBase;
            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT SYSDATE FROM DUAL");

            return Convert.ToDateTime(dbParametros.ExecuteScalar(dbCommand));
        }
        #endregion

        #region RecuperarIndicadorAtualizacaoQuantidadeOrdemPreBoleto
        /// <summary>
        /// Metodo responsavel por recuperar a informacao IN_BOLETO_ATU_ORDEM da tabela TORPARM 
        /// INDICADOR DE ATUALIZACAO DA QUANTIDADE DA ORDEM PELO PRE-BOLETO
        /// Data: 28/11/2007
        /// Autor: Diogo Milanez
        /// Obs: Criacao do metodo
        /// 
        /// Data: 07/12/2007
        /// Autor: Diogo Milanez
        /// Obs: Metodo foi renomeado de RecuperarInBoletoAtuOrdem para
        /// 
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método transposto do submódulo Comum, que será extinto
        /// </summary>
        /// <returns></returns>
        /// 
        public string RecuperarIndicadorAtualizacaoQuantidadeOrdemPreBoleto()
        {
            OracleDataBase dbParametros = this.DataBase;
            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT IN_BOLETO_ATU_ORDEM FROM TORPARM");

            return Convert.ToString(dbParametros.ExecuteScalar(dbCommand));
        }
        #endregion

        #region RecuperarAgenteCompensacao
        /// <summary>
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método transposto do submódulo Comum, que será extinto
        /// </summary>
        /// <returns></returns>
        public int RecuperarAgenteCompensacao()
        {
            return 0;
        }
        #endregion

        #region RecuperarInAgenteCompensacao
        /// <summary>
        /// Metodo responsavel por recuperar a colina IN_AGENTE_COMP da tabela torparm
        /// Data:11/02/2008 15:40
        /// Autor:DMilanez.7Comm
        /// Obs:
        /// 
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método transposto do submódulo Comum, que será extinto
        /// </summary>
        /// <returns></returns>
        public string RecuperarInAgenteCompensacao()
        {
            OracleDataBase dbParametros = this.DataBase;
            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT IN_AGENTE_COMP FROM TORPARM");

            return Convert.ToString(dbParametros.ExecuteScalar(dbCommand));
        }
        #endregion

        #region RecuperarCdAgenteCompensacao
        /// <summary>
        /// Data:11/02/2008 15:44
        /// Autor:DMilanez.7Comm
        /// Obs:
        /// 
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método transposto do submódulo Comum, que será extinto
        /// </summary>
        /// <returns></returns>
        public int RecuperarCdAgenteCompensacao()
        {
            OracleDataBase dbParametros = this.DataBase;
            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT CD_AGENTE_COMP FROM TORPARM");

            return Convert.ToInt32(dbParametros.ExecuteScalar(dbCommand));
        }
        #endregion

        #region ConsultarTipoMovimento
        /// <summary>
        /// metodo responsavel por recuperar a tipo de movimento do sistema de controle de ordens
        /// Data: 07/12/2007
        /// Autor: Diogo Milanez
        /// Obs: Criacao do metodo
        /// 
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método transposto do submódulo Comum, que será extinto
        /// </summary>
        /// <param name="modulo"></param>
        /// <returns>A - aberto F - fechado</returns>
        public string ConsultarTipoMovimento()
        {
            OracleDataBase dbOrdem = this.DataBase;
            DbCommand dbCommand = null;

            dbCommand = dbOrdem.GetSqlStringCommand("SELECT TP_MOVIMENTO FROM TBOPARAM");

            return Convert.ToString(dbOrdem.ExecuteScalar(dbCommand));
        }
        #endregion

        #region RecuperarInCompliance
        /// <summary>
        /// Metodo responsavel por recuperar a informacao IN_COMPLIANCE da tabela TORPARM
        /// Data: 30/11/2007
        /// Autor: Diogo Milanez
        /// Obs: Criacao do metodo
        /// 
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método transposto do submódulo Comum, que será extinto
        /// </summary>
        /// <returns></returns>
        public string RecuperarInCompliance()
        {
            OracleDataBase dbParametros = this.DataBase;
            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT IN_COMPLIANCE FROM TORPARM");

            return Convert.ToString(dbParametros.ExecuteScalar(dbCommand));
        }
        #endregion

        #region RecuperarIndicadorDigitoAberturaOrdem
        /// <summary>
        /// Data : 08/04/2008 - 200804081122
        /// Autor: Eduardo Sertorio - esertorio
        /// Obs. : Criacao do metodo - ref issue ID0002770
        /// 
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método transposto do submódulo Comum, que será extinto
        /// </summary>
        /// <returns></returns>
        public string RecuperarIndicadorDigitoAberturaOrdem() //incluido - esertorio - 
        {
            //Table Name : TORPARM; 
            //Table Comment : Parâmetro do Sistema de Controle de Ordens;
            //Table Column Name : IN_DIGITO;
            //Table Column Datatype : CHAR(1);
            //Table Column Null Option : NULL;
            //Table Column Comment : Pede Digito na abertura da Ordem;
            //Table Column Is PK : No;
            //Table Column Is FK : No.
            OracleDataBase dbParametros = this.DataBase;

            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT IN_DIGITO FROM TORPARM"); //incluido - esertorio - 200804081122 - ref issue ID0002770

            return Convert.ToString(dbParametros.ExecuteScalar(dbCommand));
        }
        #endregion

        #region ConsultarDataMovimento
        /// <summary>
        /// metodo responsavel por recuperar a data de movimento 
        /// Data: 07/12/2007
        /// Autor: Diogo Milanez
        /// Obs: Criacao do metodo.
        /// 
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Transposto do módulo Comum, que será extinto.
        ///           Este método foi trazido do módulo supra referido, porém não foi encontrada,
        ///           no momento da transposição, nenhuma referência a ele.
        /// </summary>
        /// <param name="modulo"></param>
        /// <returns></returns>
        public DateTime ConsultarDataMovimento()
        {
            OracleDataBase dbOrdem = this.DataBase;
            DbCommand dbCommand = null;

            dbCommand = dbOrdem.GetSqlStringCommand("SELECT DT_DATMOV FROM TBOPARAM");

            return Convert.ToDateTime(dbOrdem.ExecuteScalar(dbCommand));
        }
        #endregion

        #region ExigeDigitacaoCorrespondente
        /// <summary>
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Transposto do módulo Comum, que será extinto.
        ///           Este método foi trazido do módulo supra referido, porém não foi encontrada,
        ///           no momento da transposição, nenhuma referência a ele.
        /// </summary>
        /// <returns></returns>
        public bool ExigeDigitacaoCorrespondente()
        {
            return false;
        }
        #endregion

        #region RecuperarQuantidadeTempoCasamentoOrdem
        /// <summary>
        /// Data : 17/04/2007
        /// Autor: Eduardo Sertorio
        /// Obs. : Criacao do metodo para recuperar o parametro (Quantidade de Tempo para Casamento de Ordem) da tabela TORPARMESP - esertorio - 200804171530 - ref issue ID0002947
        /// Cada unidade equivale a aproximadamente 30 segundos.
        /// 
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Transposto do módulo Comum, que será extinto.
        ///           Este método foi trazido do módulo supra referido, porém não foi encontrada,
        ///           no momento da transposição, nenhuma referência a ele.
        /// </summary>
        public int? RecuperarQuantidadeTempoCasamentoOrdem()
        {
            OracleDataBase dbParametros = this.DataBase;
            //TORPARMESP NR_QTDADE NUMBER(3) NULL No No 
            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT NR_QTDADE FROM TORPARMESP");
            int? retorno = Convert.ToInt32(dbParametros.ExecuteScalar(dbCommand));
            return retorno;
        }
        #endregion

        #region RecuperarQuantidadeTempoCalculoFinanceiro
        /// <summary>
        /// Data : 17/04/2007
        /// Autor: Eduardo Sertorio
        /// Obs. : Criacao do metodo para recuperar o parametro (Quantidade de Tempo para Calculo Financeiro) da tabela TORPARMESP - esertorio - 200804171530 - ref issue ID0002947
        /// Cada unidade equivale a aproximadamente 30 segundos.
        /// 
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Transposto do módulo Comum, que será extinto.
        ///           Este método foi trazido do módulo supra referido, porém não foi encontrada,
        ///           no momento da transposição, nenhuma referência a ele.
        /// </summary>
        public int? RecuperarQuantidadeTempoCalculoFinanceiro()
        {
            OracleDataBase dbParametros = this.DataBase;
            //TORPARMESP NR_QTDFIN NUMBER(3) NULL No No 
            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT NR_QTDFIN FROM TORPARMESP");
            int? retorno = Convert.ToInt32(dbParametros.ExecuteScalar(dbCommand));
            return retorno;
        }
        #endregion

        #region RecuperarTipoOrdemPadraoEmpresa
        /// <summary>
        /// Data : 17/04/2007
        /// Autor: Eduardo Sertorio
        /// Obs. : Criacao do metodo para recuperar o parametro (Tipo da Ordem Padrao da Empresa) da tabela TORPARMESP - esertorio - 200804171541 - ref issue ID0002947
        /// Cada unidade equivale a aproximadamente 30 segundos.
        /// 
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Transposto do módulo Comum, que será extinto.
        ///           Este método foi trazido do módulo supra referido, porém não foi encontrada,
        ///           no momento da transposição, nenhuma referência a ele.
		/// 
		/// Data: 22/10/2008
		/// Autor: Rodrigo M Scatulin
		/// Obs. Comentado pq BovespaBase não deve existir
        /// </summary>
        /*public List<BovespaBase.Enum.TipoOrdem> RecuperarTipoOrdemPadraoEmpresa()
        {
            OracleDataBase dbParametros = this.DataBase;
            int? retorno = null;
            List<BovespaBase.Enum.TipoOrdem> response = null;
            //TORPARMESP TP_ORDEM NUMBER(1) NULL No No 
            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT NVL(TP_ORDEM,0) FROM TORPARMESP");
            retorno = Convert.ToInt32(dbParametros.ExecuteScalar(dbCommand));

            if (retorno.HasValue)
                response = BovespaBase.Util.TipoOrdem.IntToListEnumTipoOrdem(retorno.Value);

            return response;
        }*/
        #endregion
        
        #region RecuperarIndicadorAdministradoConcorrente
        /// <summary>
        /// Método RecuperarAdministradoConcorrente
        /// </summary>
        public string RecuperarIndicadorAdministradoConcorrente()
        {
            OracleDataBase dbParametros = this.DataBase;
            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT IN_ADMINCON FROM TORPARM");
            return Convert.ToString(dbParametros.ExecuteScalar(dbCommand));
        }

        #endregion RecuperarIndicadorAdministradoConcorrente
        
        #region RecuperarIndicadorBloqueio
        /// <summary>
        /// Método RecuperarIndicadorBloqueio
        /// </summary>
        public string RecuperarIndicadorBloqueio()
        {
            OracleDataBase dbParametros = this.DataBase;
            DbCommand dbCommand = dbParametros.GetSqlStringCommand("SELECT IN_BLOQUEIO FROM TORPARM");
            return Convert.ToString(dbParametros.ExecuteScalar(dbCommand));
        }

        #endregion RecuperarIndicadorBloqueio

        #region ObterParametro
        //Task :5435
        //Data :27/02/2009
        //Autor:APsilva
        /// <summary>
        /// Retornar todos os parametros da base
        /// </summary>
        /// <returns></returns>
        public BusinessEntity.Parametro ObterParametro()
        {
            BusinessEntity.Parametro response = null;
            StringBuilder sql = new StringBuilder();
            sql.Append(@"SELECT CD_CODUSU OperadorPreferenciasPadrao, "); 
            sql.Append(@"CD_CODUSU_EXE OperadorAutomaticoExercicio,CD_CODUSU_HOME OperadorOrdemSemIdentificacao, ");
            sql.Append(@"CD_CODUSU_CUSTODIA OperadorCustodia, IN_DISBRO RestoDistribuicaoUltimoCliente, ");
            sql.Append(@"IN_CAR888 TipoLiquidacaoCAutomatica, IN_GRAVAOBS GravaSempreObservacao, ");
            sql.Append(@"IN_FECHAPRE MantemTelaPreBoletoAberta,IN_DIGITO IndicadorDigitoCliente, ");
            sql.Append(@"IN_AGENTE_COMP AgenteCompensacao, CD_AGENTE_COMP CodigoAgenteCompensacao, ");
            sql.Append(@"DS_CAMINHO_ORDEM CaminhoArquivoOrdem, IN_DES_CLI DescontoOperacao, ");
            sql.Append(@"IN_FRACIONARIO JuntaFracionario, IN_COMPLIANCE Compliance, ");
            sql.Append(@"IN_CASA_PREBOLETO CasaOrdemPreBoleto, HH_INICIO_PREGAO InicioPregao, ");
            sql.Append(@"VL_IMF CPMF, IN_TIPO_CORR_HOME TipoCorretagemHomeBroker, ");
            sql.Append(@"CD_MENSAGEM CodigoMensagem, NR_DECURSO_PRAZO DiasCancelamentoOrdens, ");
            sql.Append(@"IN_CANCELA_ORDEM NaoExecutadaCancelamentoOrdens, IN_BLOQUEIO BloqueioClientes, ");
            sql.Append(@"IN_CANCELA_VALIDADE CancelaValidadeOrdem, IN_DECURSO_PRAZO AposPeriodoCancelamentoOrdens, ");
            sql.Append(@"IN_CANCELA_ANO_SEGUINTE ParaAnoSeguinte, IN_VERI_SALD_NGCV SaldoNegociavelCustodia, ");
            sql.Append(@"IN_BOLETO_ATU_ORDEM PreBoletoAumentaOrdem, IN_FINANC CalculoAutomaticoFinanceiro, ");
            sql.Append(@"IN_DESPREZA_300 DesprezaOfertaOperadorApontado, IN_ORDEM_INDICE AberturaOrdemOpcoesIndice, ");
            sql.Append(@"IN_OFMEGA SinalMegabolsa, IN_VERF_BLOQ_MEGA BloqueioRecepcaoOfertas, ");
            sql.Append(@"IN_USA_268 Carteira268AutomaticaTermo, IN_UTIL_LIM_CRE LimiteCredito, ");
            sql.Append(@"IN_ADMINCON IndAdministradoConcorrente, IN_NUMEXT NumeracaoAtributoExterno, ");
            sql.Append(@"COD_MSG_ZECZE CodigoMensagemZe FROM TORPARM ");

            using (DbCommand command = this.DataBase.GetSqlStringCommand(sql.ToString()))
            {
                response = this.FindOne<BusinessEntity.Parametro>(command, new ConstructEntity<BusinessEntity.Parametro>(ConstrutorObterParametro));
            }

            return response;
        }


        #region ConstrutorObterParametro

        //Task :5435
        //Data :27/02/2009
        //Autor:APsilva
        /// <summary>
        /// Consutrutor para o Metodo ObterParametro
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        protected BusinessEntity.Parametro ConstrutorObterParametro(IDataReader reader)
        {
            BusinessEntity.Parametro entity = new BusinessEntity.Parametro();
            entity.AberturaOrdemOpcoesIndice = retornarBoleano(reader.GetValue<String>("AberturaOrdemOpcoesIndice"));
            entity.AgenteCompensacao = retornarBoleano(reader.GetValue<String>("AgenteCompensacao"));
            entity.AposPeriodoCancelamentoOrdens = retornarBoleano(reader.GetValue<String>("AposPeriodoCancelamentoOrdens"));
            entity.BloqueioClientes = retornarBoleano(reader.GetValue<String>("BloqueioClientes"));
            entity.BloqueioRecepcaoOfertas = retornarBoleano(reader.GetValue<String>("BloqueioRecepcaoOfertas"));
            entity.CalculoAutomaticoFinanceiro = retornarBoleano(reader.GetValue<String>("CalculoAutomaticoFinanceiro"));
            entity.CaminhoArquivoOrdem = reader.GetValue<String>("CaminhoArquivoOrdem");
            entity.CancelaValidadeOrdem = retornarBoleano(reader.GetValue<String>("CancelaValidadeOrdem"));
            entity.Carteira268AutomaticaTermo = retornarBoleano(reader.GetValue<String>("Carteira268AutomaticaTermo"));
            entity.CasaOrdemPreBoleto = retornarBoleano(reader.GetValue<String>("CasaOrdemPreBoleto"));
            entity.CodigoAgenteCompensacao =reader.GetValue<int?>("CodigoAgenteCompensacao");
            entity.CodigoMensagem = reader.GetValue<int?>("CodigoMensagem");
            entity.CodigoMensagemZeComZe = reader.GetValue<int?>("CodigoMensagemZe");
            entity.Compliance = retornarBoleano(reader.GetValue<String>("Compliance"));
            entity.CPMF = reader.GetValue<decimal?>("CPMF");
            entity.DescontoOperacao = retornarBoleano(reader.GetValue<String>("DescontoOperacao"));
            entity.DesprezaOfertaOperadorApontado = retornarBoleano(reader.GetValue<String>("DesprezaOfertaOperadorApontado"));
            entity.DiasCancelamentoOrdens = reader.GetValue<int?>("DiasCancelamentoOrdens");
            entity.GravaSempreObservacao = retornarBoleano(reader.GetValue<String>("GravaSempreObservacao"));
            entity.IndicadorAdministradoConcorrente = retornarBoleano(reader.GetValue<String>("IndAdministradoConcorrente"));
            entity.IndicadorDigitoCliente = reader["IndicadorDigitoCliente"] == DBNull.Value ? "N" : reader.GetValue<string>("IndicadorDigitoCliente");
            entity.InicioPregao = reader.GetValue<DateTime>("InicioPregao");
            entity.JuntaFracionario = reader["JuntaFracionario"] == DBNull.Value ? 'N' : reader.GetValue<char>("JuntaFracionario");
            entity.LimiteCredito = retornarBoleano(reader.GetValue<String>("LimiteCredito"));
            entity.MantemTelaPreBoletoAberta = retornarBoleano(reader.GetValue<String>("MantemTelaPreBoletoAberta"));
            entity.NaoExecutadaCancelamentoOrdens = retornarBoleano(reader.GetValue<String>("NaoExecutadaCancelamentoOrdens"));
            entity.NumeracaoAtributoExterno = retornarBoleano(reader.GetValue<String>("NumeracaoAtributoExterno"));
            entity.OperadorAutomaticoExercicio = reader.GetValue<int?>("OperadorAutomaticoExercicio");
            entity.OperadorCustodia = reader.GetValue<int?>("OperadorCustodia");
            entity.OperadorOrdemSemIdentificacao = reader.GetValue<int?>("OperadorOrdemSemIdentificacao");
            entity.OperadorPreferenciasPadrao = reader.GetValue<int?>("OperadorPreferenciasPadrao");
            entity.ParaAnoSeguinte = retornarBoleano(reader.GetValue<String>("ParaAnoSeguinte"));
            entity.PreBoletoAumentaOrdem = retornarBoleano(reader.GetValue<String>("PreBoletoAumentaOrdem"));
            entity.RestoDistribuicaoUltimoCliente = retornarBoleano(reader.GetValue<String>("RestoDistribuicaoUltimoCliente"));
            entity.SaldoNegociavelCustodia = retornarBoleano(reader.GetValue<String>("SaldoNegociavelCustodia"));
            //Task  : 5929
            //Author: Apsilva   
            //Data  : 31/03/2009
            entity.SinalMegabolsa = (reader.GetValue<String>("SinalMegabolsa")== "H") ? true: false;
            entity.TipoCorretagemHomeBroker = reader.GetValue<int?>("TipoCorretagemHomeBroker");
            entity.TipoLiquidacaoCAutomatica = retornarBoleano(reader.GetValue<String>("TipoLiquidacaoCAutomatica"));
            
            return entity;
        }

        //Task :5435
        //Data :27/02/2009
        //Autor:APsilva 
        /// <summary>
        /// Verificar o valor e retornar true or false dependendo do conteúdo do campo
        /// conforme EA
        /// </summary>
        /// <param name="p"></param>
        /// <returns>bool</returns>
        private bool retornarBoleano(string p)
        {
            if (p == "S")
                return true;
            else
                return false; 
        }
        #endregion
        #endregion



        #region AlterarParametro
        //Task :5435
        //Data :27/02/2009
        //Autor:APsilva 
        /// <summary>
        /// Atualizar os parâmetros a partir do request
        /// </summary>
        /// <param name="request"></param>
        public void AlterarParametro(BusinessEntity.Parametro request)
        {
            StringBuilder sql = new StringBuilder();
            sql.AppendLine ("UPDATE TORPARM");
            sql.AppendLine("  SET CD_CODUSU = :OperadorPreferenciasPadrao"); // (Preferências Padrão)
            sql.AppendLine(",CD_CODUSU_EXE = :OperadorAutomaticoExercicio"); //(Operador Automático para Exercício)
            sql.AppendLine(",CD_CODUSU_HOME = :OperadorOrdemSemIdentificacao"); //  (Operador padrão para Ordem sem identificação)
            sql.AppendLine(",CD_CODUSU_CUSTODIA = :OperadorCustodia");// (Operador padrão para Custódia)
            sql.AppendLine(",IN_DISBRO = :RestoDistribuicaoUltimoCliente");//(Resto da Distribuição (preço médio) para o Último Cliente)
            sql.AppendLine(",IN_CAR888 = :TipoLiquidacaoCAutomatica"); //(Tipo de Liquidação "C" Automática)
            sql.AppendLine(",IN_GRAVAOBS = :GravaSempreObservacao");// (Grava sempre Observação)
            sql.AppendLine(",IN_FECHAPRE = :MantemTelaPreBoletoAberta");//(Mantém a tela de Pré-boléto aberta)
            sql.AppendLine(",IN_DIGITO = :IndicadorDigitoCliente");//(Dígito de Cliente na Digitação de Ordens)
            sql.AppendLine(",IN_AGENTE_COMP = :AgenteCompensacao");//(Agente de Compensação)
            sql.AppendLine(",CD_AGENTE_COMP = :CodigoAgenteCompensacao"); //(Combo associado Agente de Compensação)
            sql.AppendLine(",DS_CAMINHO_ORDEM = :CaminhoArquivoOrdem");//(Caminho do Arquivo de Ordem)
            sql.AppendLine(",IN_DES_CLI = :DescontoOperacao");//(Utiliza Desconto por Operação)
            sql.AppendLine(",IN_FRACIONARIO = :JuntaFracionario");//(Usa Frácionario como Vista)
            sql.AppendLine(",IN_COMPLIANCE = :Compliance");//(Utiliza Compliance)
            sql.AppendLine(",IN_CASA_PREBOLETO = :CasaOrdemPreBoleto");//(Casa Ordem com Pré-Boleto)
            sql.AppendLine(",HH_INICIO_PREGAO = :InicioPregao");//(Horário de Início do Pregão)
            sql.AppendLine(",VL_IMF = :CPMF");//(CPMF)
            sql.AppendLine(",IN_TIPO_CORR_HOME = :TipoCorretagemHomeBroker"); //(Tipo de Corretagem HomeBroker)
            sql.AppendLine(",CD_MENSAGEM = :CodigoMensagem");//(combo associado Mensagem (Cancelamento de Ordens))
            sql.AppendLine(",NR_DECURSO_PRAZO = :DiasCancelamentoOrdens"); //(Dias (Cancelamento de Ordens))
            sql.AppendLine(",IN_CANCELA_ORDEM = :NaoExecutadaCancelamentoOrdens");//(Não Executada)
            sql.AppendLine(",IN_BLOQUEIO = :BloqueioClientes");//(Utiliza Bloqueio de Clientes)
            sql.AppendLine(",IN_CANCELA_VALIDADE = :CancelaValidadeOrdem");//(Cancela Validade da Ordem)
            sql.AppendLine(",IN_DECURSO_PRAZO = :AposPeriodoCancelamentoOrdens");//(Após Periodo de : (Cancelamento de Ordens))
            sql.AppendLine(",IN_CANCELA_ANO_SEGUINTE = :ParaAnoSeguinte");//(Para Ano Seguinte)
            sql.AppendLine(",IN_VERI_SALD_NGCV = :SaldoNegociavelCustodia");// (Verifica saldo negociável em Custódia)
            sql.AppendLine(",IN_BOLETO_ATU_ORDEM = :PreBoletoAumentaOrdem");// (Indica Pré-Boleto aumenta Ordem)
            sql.AppendLine(",IN_FINANC = :CalculoAutomaticoFinanceiro");// (Cálculo Automático do Financeiro)
            sql.AppendLine(",IN_DESPREZA_300 = :DesprezaOfertaOperadorApontado");// (Despreza Oferta de Operador Apontado)
            sql.AppendLine(",IN_ORDEM_INDICE = :AberturaOrdemOpcoesIndice");//(Indica Abertura de Ordem no Exercicio de Opções de Indice)
            sql.AppendLine(",IN_OFMEGA = :SinalMegabolsa");// (Sinal Megabolsa)
            sql.AppendLine(",IN_VERF_BLOQ_MEGA = :BloqueioRecepcaoOfertas");//(Verifica bloqueio na recepção de Ofertas do Megabolsa)
            sql.AppendLine(",IN_USA_268 = :Carteira268AutomaticaTermo");//(Carteira 268 Automatica no Termo)
            sql.AppendLine(",IN_UTIL_LIM_CRE = :LimiteCredito"); //Utiliza Limite de Credito)
            sql.AppendLine(",IN_ADMINCON = :IndAdministradoConcorrente");//(Usa Cliente Administrado Concorrente)
            sql.AppendLine(",IN_NUMEXT = :NumeracaoAtributoExterno");// (Numeração de Atributo 
            sql.AppendLine(",COD_MSG_ZECZE = :CodigoMensagemZe");

            using (DbCommand command = this.DataBase.GetSqlStringCommand(sql.ToString()))
            {
                this.DataBase.AddInParameter(command, "OperadorPreferenciasPadrao", DbType.Int32, request.OperadorPreferenciasPadrao);
                this.DataBase.AddInParameter(command, "OperadorAutomaticoExercicio", DbType.Int32, request.OperadorAutomaticoExercicio);
                this.DataBase.AddInParameter(command, "OperadorOrdemSemIdentificacao", DbType.Int32, request.OperadorOrdemSemIdentificacao);
                this.DataBase.AddInParameter(command, "OperadorCustodia", DbType.Int32, request.OperadorCustodia);
                this.DataBase.AddInParameter(command, "RestoDistribuicaoUltimoCliente", DbType.AnsiString, retornarValorString(request.RestoDistribuicaoUltimoCliente));
                this.DataBase.AddInParameter(command, "TipoLiquidacaoCAutomatica", DbType.AnsiString, retornarValorString(request.TipoLiquidacaoCAutomatica));
                this.DataBase.AddInParameter(command, "GravaSempreObservacao", DbType.AnsiString, retornarValorString(request.GravaSempreObservacao));
                this.DataBase.AddInParameter(command, "MantemTelaPreBoletoAberta", DbType.String, retornarValorString(request.MantemTelaPreBoletoAberta));
                this.DataBase.AddInParameter(command, "IndicadorDigitoCliente", DbType.AnsiString, request.IndicadorDigitoCliente);
                this.DataBase.AddInParameter(command, "AgenteCompensacao", DbType.AnsiString, retornarValorString(request.AgenteCompensacao));
                this.DataBase.AddInParameter(command, "CodigoAgenteCompensacao", DbType.Int32, request.CodigoAgenteCompensacao);
                this.DataBase.AddInParameter(command, "CaminhoArquivoOrdem", DbType.AnsiString, request.CaminhoArquivoOrdem);
                this.DataBase.AddInParameter(command, "DescontoOperacao", DbType.AnsiString, retornarValorString(request.DescontoOperacao));
                this.DataBase.AddInParameter(command, "JuntaFracionario", DbType.AnsiString, request.JuntaFracionario);
                this.DataBase.AddInParameter(command, "Compliance", DbType.AnsiString, retornarValorString(request.Compliance));
                this.DataBase.AddInParameter(command, "CasaOrdemPreBoleto", DbType.AnsiString, retornarValorString(request.CasaOrdemPreBoleto));
                this.DataBase.AddInParameter(command, "InicioPregao", DbType.AnsiString, request.InicioPregao.ToString("HH:mm"));
                this.DataBase.AddInParameter(command, "CPMF", DbType.Decimal, request.CPMF);
                this.DataBase.AddInParameter(command, "TipoCorretagemHomeBroker", DbType.Int32,request.TipoCorretagemHomeBroker);
                this.DataBase.AddInParameter(command, "CodigoMensagem", DbType.Int32 , request.CodigoMensagem);
                this.DataBase.AddInParameter(command, "DiasCancelamentoOrdens", DbType.Int32, request.DiasCancelamentoOrdens);
                this.DataBase.AddInParameter(command, "NaoExecutadaCancelamentoOrdens", DbType.AnsiString, retornarValorString(request.NaoExecutadaCancelamentoOrdens));
                this.DataBase.AddInParameter(command, "BloqueioClientes", DbType.AnsiString, retornarValorString(request.BloqueioClientes));
                this.DataBase.AddInParameter(command, "CancelaValidadeOrdem", DbType.AnsiString, retornarValorString(request.CancelaValidadeOrdem));
                this.DataBase.AddInParameter(command, "AposPeriodoCancelamentoOrdens", DbType.AnsiString, retornarValorString(request.AposPeriodoCancelamentoOrdens));
                this.DataBase.AddInParameter(command, "ParaAnoSeguinte", DbType.AnsiString, retornarValorString(request.ParaAnoSeguinte));
                this.DataBase.AddInParameter(command, "SaldoNegociavelCustodia", DbType.AnsiString, retornarValorString(request.SaldoNegociavelCustodia));
                this.DataBase.AddInParameter(command, "PreBoletoAumentaOrdem", DbType.AnsiString, retornarValorString(request.PreBoletoAumentaOrdem));
                this.DataBase.AddInParameter(command, "CalculoAutomaticoFinanceiro", DbType.AnsiString, retornarValorString(request.CalculoAutomaticoFinanceiro));
                this.DataBase.AddInParameter(command, "DesprezaOfertaOperadorApontado", DbType.AnsiString, retornarValorString(request.DesprezaOfertaOperadorApontado));
                this.DataBase.AddInParameter(command, "AberturaOrdemOpcoesIndice", DbType.AnsiString, retornarValorString(request.AberturaOrdemOpcoesIndice));
                //Task  : 5929
                //Author: Apsilva   
                //Data  : 31/03/2009
                this.DataBase.AddInParameter(command, "SinalMegabolsa", DbType.AnsiString, request.SinalMegabolsa ? "H":"N" );
                this.DataBase.AddInParameter(command, "BloqueioRecepcaoOfertas", DbType.AnsiString, retornarValorString(request.BloqueioRecepcaoOfertas));
                this.DataBase.AddInParameter(command, "Carteira268AutomaticaTermo", DbType.AnsiString, retornarValorString(request.Carteira268AutomaticaTermo));
                this.DataBase.AddInParameter(command, "LimiteCredito", DbType.AnsiString, retornarValorString(request.LimiteCredito));
                this.DataBase.AddInParameter(command, "IndAdministradoConcorrente", DbType.AnsiString, retornarValorString(request.IndicadorAdministradoConcorrente));
                this.DataBase.AddInParameter(command, "NumeracaoAtributoExterno", DbType.AnsiString, retornarValorString(request.NumeracaoAtributoExterno));

                this.DataBase.AddInParameter(command, "CodigoMensagemZe", DbType.Int32, request.CodigoMensagemZeComZe);
                this.DataBase.ExecuteNonQuery(command);
            }
        }
        /// <summary>
        /// Traduzir o valor a ser armazenado no banco
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        private string retornarValorString(bool p)
        {
            if (p)
                return "S";
            else
                return "N";
        }
        #endregion
        

    }
}



